package com.xhcl.system.service.impl;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.fastjson.JSON;
import com.xhcl.system.mapper.TSrhsZfpztiMapper;
import com.xhcl.system.mapper.TSrhsZfpztoMapper;
import com.xhcl.system.domain.TSrhsBkpzto;
import com.xhcl.system.domain.TSrhsZfpzti;
import com.xhcl.system.domain.TSrhsZfpzto;
import com.xhcl.system.service.ITSrhsHsxtcsService;
import com.xhcl.system.service.ITSrhsZfpztoService;
import com.xhcl.common.core.text.Convert;
import com.xhcl.common.exception.BusinessException;

/**
 * 国库支付凭证头Service业务层处理
 * 
 * @author xhcl
 * @date 2020-09-09
 */
@Service
public class TSrhsZfpztoServiceImpl implements ITSrhsZfpztoService 
{
    @Autowired
    private TSrhsZfpztoMapper tSrhsZfpztoMapper;
    @Autowired
    private TSrhsZfpztiMapper tSrhsZfpztiMapper;
    @Autowired
    private ITSrhsHsxtcsService tSrhsHsxtcsService;

    /**
     * 查询国库支付凭证头
     * 
     * @param zfxh 国库支付凭证头ID
     * @return 国库支付凭证头
     */
    @Override
    public TSrhsZfpzto selectTSrhsZfpztoById(Long zfxh)
    {
        return tSrhsZfpztoMapper.selectTSrhsZfpztoById(zfxh);
    }

    /**
     * 查询国库支付凭证头列表
     * 
     * @param tSrhsZfpzto 国库支付凭证头
     * @return 国库支付凭证头
     */
    @Override
    public List<TSrhsZfpzto> selectTSrhsZfpztoList(TSrhsZfpzto tSrhsZfpzto)
    {
        return tSrhsZfpztoMapper.selectTSrhsZfpztoList(tSrhsZfpzto);
    }

    /**
     * 新增国库支付凭证头
     * 
     * @param tSrhsZfpzto 国库支付凭证头
     * @return 结果
     */
    @Override
    @Transactional
    public int insertTSrhsZfpzto(TSrhsZfpzto tSrhsZfpzto,String username) throws BusinessException
    {   
    	Long zfxh=tSrhsZfpztoMapper.selectTSrhsZfpztoZfxh();
    	//kjkmmc
    	if (tSrhsZfpzto==null){
    		throw new BusinessException("拨款信息为空！");
    	}
    	//kjkmmc
    	if (tSrhsZfpzto.getKjkmmc()==null){
    		throw new BusinessException("拨款单位为空！");
    	}
    	
    	List<TSrhsZfpzti> list=JSON.parseArray(tSrhsZfpzto.getKjkmmc(),TSrhsZfpzti.class);
    	
    	BigDecimal zje=new BigDecimal("0");
    	for (TSrhsZfpzti zfti:list){
    		zje=zje.add(zfti.getJe());
    	}
    	tSrhsZfpzto.setZje(zje);
    	tSrhsZfpzto.setZfxh(zfxh);
    	tSrhsZfpzto.setKjkmmc("");
    	tSrhsZfpzto.setShbz(0L);
    	tSrhsZfpzto.setDybz(0L);
    	tSrhsZfpzto.setZd(username);
    	if (tSrhsZfpzto.getBklx().equals(1L)){
    		tSrhsZfpzto.setKjkmdm(tSrhsZfpzto.getJjkmdm());
    		tSrhsZfpzto.setKjkmmc(tSrhsZfpzto.getJjkmmc());
    	}
        int intRow=tSrhsZfpztoMapper.insertTSrhsZfpzto(tSrhsZfpzto);
    	
    	Long i=1L;
    	for (TSrhsZfpzti zfti:list){
    		zfti.setXh(i);
    		zfti.setZfxh(zfxh);
    		i++;
    		tSrhsZfpztiMapper.insertTSrhsZfpzti(zfti);
    	}
    	return intRow;
    }

    /**
     * 修改国库支付凭证头
     * 
     * @param tSrhsZfpzto 国库支付凭证头
     * @return 结果
     */
    @Override
    @Transactional
    public int updateTSrhsZfpzto(TSrhsZfpzto tSrhsZfpzto,String username) throws  BusinessException
    {   
    
    	if (tSrhsZfpztoMapper.selectTSrhsZfpztoIsVerify(tSrhsZfpzto.getZfxh())>0){
    		throw new BusinessException("已审核不能修改！"); 
    	}
    	//kjkmmc
    	if (tSrhsZfpzto==null){
    		throw new BusinessException("拨款信息为空！");
    	}
    	//kjkmmc
    	if (tSrhsZfpzto.getKjkmmc()==null){
    		throw new BusinessException("拨款单位为空！");
    	}
    	tSrhsZfpztiMapper.deleteTSrhsZfpztiById(tSrhsZfpzto.getZfxh());
        tSrhsZfpztoMapper.deleteTSrhsZfpztoById(tSrhsZfpzto.getZfxh());
    	List<TSrhsZfpzti> list=JSON.parseArray(tSrhsZfpzto.getKjkmmc(),TSrhsZfpzti.class);
    	
    	BigDecimal zje=new BigDecimal("0");
    	for (TSrhsZfpzti zfti:list){
    		zje=zje.add(zfti.getJe());
    	}
    	tSrhsZfpzto.setZje(zje);
    	tSrhsZfpzto.setKjkmmc("");
    	tSrhsZfpzto.setShbz(0L);
    	tSrhsZfpzto.setDybz(0L);
    	tSrhsZfpzto.setZd(username);
    	if (tSrhsZfpzto.getBklx().equals(1L)){
    		tSrhsZfpzto.setKjkmdm(tSrhsZfpzto.getJjkmdm());
    		tSrhsZfpzto.setKjkmmc(tSrhsZfpzto.getJjkmmc());
    	}
        int intRow=tSrhsZfpztoMapper.insertTSrhsZfpzto(tSrhsZfpzto);
    	
    	Long i=1L;
    	for (TSrhsZfpzti zfti:list){
    		zfti.setXh(i);
    		zfti.setZfxh(tSrhsZfpzto.getZfxh());
    		i++;
    		tSrhsZfpztiMapper.insertTSrhsZfpzti(zfti);
    	}
    	return intRow;
    }

    /**
     * 删除国库支付凭证头对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteTSrhsZfpztoByIds(String ids) throws BusinessException
    
    {   String[] zfxhs=Convert.toStrArray(ids);
        for( int i=0;i<zfxhs.length;i++){
        	if (tSrhsZfpztoMapper.selectTSrhsZfpztoIsVerify(Long.valueOf(zfxhs[i]))>0){
        		throw new BusinessException("存在已审核记录不能删除！"); 
        	}
        }
    	tSrhsZfpztiMapper.deleteTSrhsZfpztiByIds(Convert.toStrArray(ids));
        return tSrhsZfpztoMapper.deleteTSrhsZfpztoByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除国库支付凭证头信息
     * 
     * @param zfxh 国库支付凭证头ID
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteTSrhsZfpztoById(Long zfxh) throws BusinessException
    {   
    	if (tSrhsZfpztoMapper.selectTSrhsZfpztoIsVerify(zfxh)>0){
    		throw new BusinessException("已审核不能删除！"); 
    	}
    	tSrhsZfpztiMapper.deleteTSrhsZfpztiById(zfxh);
        return tSrhsZfpztoMapper.deleteTSrhsZfpztoById(zfxh);
    }
    
    
    @Override
    public void verifyTsrhsZfpztoByIds(String ids,String userName) throws BusinessException
    
    {   String[] zfxhs=Convert.toStrArray(ids);
        for( int i=0;i<zfxhs.length;i++){
        	if (tSrhsZfpztoMapper.selectTSrhsZfpztoIsVerify(Long.valueOf(zfxhs[i]))>0){
        		throw new BusinessException("存在已审核记录不能再审核！"); 
        	}
        }
        String ifone=tSrhsHsxtcsService.getHsxtcsnr("ifone");
    	for( int i=0;i<zfxhs.length;i++){
    		 
    		 TSrhsZfpzto zfto=tSrhsZfpztoMapper.selectTSrhsZfpztoById(Long.valueOf(zfxhs[i]));
	    	 if (zfto!=null && zfto.getZd()!=null){
	    		 if ((ifone != null) && (ifone.equals("0")) && (zfto.getZd().equals(userName))) {
					 throw new BusinessException("制单与审核不能是同一人");
				 }
	    	 }
    	}
    	Map<String,Object> map=new HashMap<String,Object>();
    	map.put("zfxhs", ids);
    	map.put("sh", userName);
        tSrhsZfpztoMapper.callZfpzVerify(map);
        if (map.get("outrev")!=null && !map.get("outrev").toString().equals("ok")){
        	throw new BusinessException(map.get("outrev").toString()); 
        }
    }
    
    public void ZfpzCancel(TSrhsZfpzto tSrhsZfpzto) throws BusinessException
    {   
    	if (tSrhsZfpztoMapper.selectTSrhsZfpztoIsVerify(tSrhsZfpzto.getZfxh())==0){
    		throw new BusinessException("此记录未审核记录不能再撤销！"); 
    	}
    	Map<String,Object> map=new HashMap<String,Object>();
    	map.put("pztxh", tSrhsZfpzto.getPztxh()); 
        tSrhsZfpztoMapper.callZfpzCancel(map);
        if (map.get("outrev")!=null && !map.get("outrev").toString().equals("ok")){
        	throw new BusinessException(map.get("outrev").toString()); 
        }
    }
}
